importPackage(Packages.java.io);
importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.Config.js
//@include lib_sol.common.Template.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.SordTypeUtils.js
//@include lib_sol.common.RepoUtils.js
//@include lib_sol.common.ix.ServiceBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.UploadFile" });
/**
* @author ESt, ELO Digital Office GmbH
* @version 1.0
*
* Uploads a file into a folder (objId) and returns the objId and guid of the created file.
*
* @cfg {String} objId (required) target folder
* @cfg {String} base64Content (required) base64 String
* @cfg {String} extension (required) file extension (jpg, png)
* @cfg {Number} encryptionSet (optional) encryption set
* @cfg {Object} cfg (required)
* @cfg {String} cfg.maskName (required) mask name for target file
* @cfg {String} cfg.fileName (required) file name for target file
* @cfg {String} cfg.extension (optional) extension e.g. "png". will use "jpg" as fallback if undefined
* @cfg {String} cfg.type (optional) sord type for target file
*
* @eloix
* @requires sol.common.Config
* @requires sol.common.Template
* @requires sol.common.ix.ServiceBase
* @requires sol.common.RepoUtils
*
*/
sol.define("sol.common.ix.services.UploadFile", {
extend: "sol.common.ix.ServiceBase",
requiredConfig: ["objId", "base64Content"],
docExists: function (folderId, name, mask, ext) {
var me = this;
try {
return (function (oldDoc) {
return oldDoc && (+(oldDoc.mask) === +(mask) || String(oldDoc.maskName) === mask) && String(oldDoc.docVersion.ext) == ext && oldDoc.id;
})(ixConnect.ix().checkoutSord("ARCPATH[" + sol.common.RepoUtils.getSord(folderId).guid + "]:/" + name, SordC.mbAll, LockC.NO));
} catch (e) {
return me.logger.debug("No old version found: ", e) && false;
}
},
/**
* Uploads the given file base64 content
* @return {Object} Contains the `objId` of the uploaded image
*/
process: function () {
var me = this,
dstObjId, dstGuid, targetFolder, oldFileId, configForSaveToRepo, fileName = me.cfg.fileName || me.cfg.pictureName, sord;
targetFolder = ixConnect.ix().checkoutSord(me.objId, SordC.mbAllIndex, LockC.NO).id;
fileName = ~fileName.indexOf("{{") ? sol.common.TemplateUtils.render(fileName) : fileName;
configForSaveToRepo = {
name: fileName,
base64Content: me.base64Content,
extension: me.extension,
encryptionSet: me.encryptionSet,
maskId: me.cfg.maskName
};
oldFileId = me.docExists(targetFolder, fileName, me.cfg.maskName, me.extension);
configForSaveToRepo[(oldFileId ? "objId" : "parentId")] = oldFileId || targetFolder;
dstObjId = sol.common.RepoUtils.saveToRepo(configForSaveToRepo);
sord = ixConnect.ix().checkoutSord(dstObjId, EditInfoC.mbSord, LockC.NO).sord;
dstGuid = sord.guid;
if (me.cfg.type) {
try {
if (Number.isInteger(parseInt(me.cfg.type, 10))) {
sord.type = parseInt(me.cfg.type, 10);
} else {
sord.type = sol.common.SordTypeUtils.getSordTypeId(me.cfg.type);
}
} catch (e) {
me.logger.debug("could not retrieve sordtype via id", e);
throw "UploadFile: could not retrieve sordtype via id `" + me.cfg.type + "`";
}
try {
ixConnect.ix().checkinSord(sord, SordC.mbAllIndex, LockC.NO);
} catch (e) {
me.logger.debug("updating sord type failed during checkin", e);
throw "UploadFile: updating sord type failed during checkin.";
}
}
return { objId: dstObjId, guid: String(dstGuid) };
}
});
/**
* @member sol.common.ix.services.UploadFile
* @method RF_sol_common_service_UploadFile
* @static
* @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
*/
function RF_sol_common_service_UploadFile(iXSEContext, args) {
logger.enter("RF_sol_common_service_UploadFile", args);
var params, service, result;
params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "objId", "base64Content", "cfg");
service = sol.create("sol.common.ix.services.UploadFile", {
objId: params.objId,
base64Content: params.base64Content,
extension: params.extension,
encryptionSet: params.encryptionSet,
cfg: params.cfg
});
result = JSON.stringify(service.process());
logger.exit("RF_sol_common_service_UploadFile", result);
return result;
}
/**
* @deprecated moved here from common_document for backwards compatibility
* @member sol.common_document.ix.services.UploadFile
* @method RF_sol_common_document_service_UploadFile
* @static
* @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
*/
function RF_sol_common_document_service_UploadFile(iXSEContext, args) {
logger.enter("RF_sol_common_document_service_UploadFile", args);
var params, service, result;
params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "objId", "base64Content", "cfg");
service = sol.create("sol.common.ix.services.UploadFile", {
objId: params.objId,
base64Content: params.base64Content,
extension: params.extension || "jpg",
encryptionSet: params.encryptionSet,
cfg: params.cfg
});
result = JSON.stringify(service.process());
logger.exit("RF_sol_common_document_service_UploadFile", result);
return result;
}